home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 41.zip
/
BS1 part 41
/
BASICS compilation.adf
/
finclude
/
AmigaExecSubs
< prev
next >
Wrap
Text File
|
1988-01-20
|
5KB
|
241 lines
FUNCTION CreateStdIO
?
? declared as PTR_TO IOStdReq
?
? PURPOSE: Function allocates memory for and initializes a new
? IO request block
?
? EXPECTS: A PTR_TO initialized message port-used as this IO
? request's reply port
?
? RESULT: A PTR_TO a new initialized IOStdRequest block.
? Returns NIL if inadequate memory
?
PARAMETER
PTR_TO MsgPort ioReplyPort
LOCAL
PTR_TO IOStdReq ioStdReq
IF ioReplyPort=NIL THEN
CreateStdIO=NIL
GRETURN
ENDIF
ioStdReq=ALLOCATE_WITH(SIZEOF(IOStdReq),MEMF_PUBLIC OR MEMF_CLEAR)
IF ioStdReq=NIL THEN
CreateStdIO=NIL
GRETURN
ENDIF
ioStdReq.io_Message.mn_Node.ln_Type=NT_MESSAGE
ioStdReq.io_Message.mn_Node.ln_Pri=0
CreateStdIO=ioStdReq
GRETURN
END
?
?
SUBROUTINE DeleteStdIO
?
? PURPOSE: Returns memory and signal bit associated with an IO request
?
? EXPECTS: A PTR_TO IOStdReq RECORD whose resources are to be freed
?
PARAMETER
PTR_TO IOStdReq ioStdReq
LOCAL
INTEGER I
ioStdReq.io_Message.mn_Node.ln_Type=-1
ioStdReq.io_Device=-1
ioStdReq.io_Unit=-1
I=DEALLOCATE(SIZEOF(IOStdReq),ioStdReq)
GRETURN
END
?
?
FUNCTION CreatePort
?
? declared as PTR_TO MsgPort
?
? PURPOSE: Function allocates memory and signal bit for Port
?
? EXPECTS: 1). PTR_TO TEXT pointing to 0-terminated text string
? representing name of Port
? 2). BYTE priority of Port
?
? RETURNS: PTR_TO new block
? NIL if inadequate memory or SigBits
?
PARAMETER
PTR_TO TEXT name
BYTE pri
LOCAL
BYTE sigBit
PTR_TO MsgPort port
sigBit=AllocSignal(ExecBase,-1)
IF sigBit=-1 THEN
CreatePort=NIL
GRETURN
ENDIF
port=ALLOCATE_WITH(SIZEOF(MsgPort),MEMF_PUBLIC OR MEMF_CLEAR)
IF port=NIL THEN
FreeSignal(ExecBase,sigBit)
CreatePort=NIL
GRETURN
ENDIF
port.mp_Node.ln_Name=name
port.mp_Node.ln_Pri=pri
port.mp_Node.ln_Type=NT_MSGPORT
port.mp_Flags=0
port.mp_SigBit=sigBit
port.mp_SigTask=FindTask(ExecBase,NIL)
IF name<>NIL THEN
AddPort(ExecBase,port)
ELSE
NewList(@port.mp_MsgList)
ENDIF
CreatePort=port
GRETURN
END
?
?
SUBROUTINE NewList
?
? PURPOSE: To properly initialize the list header before use
?
? EXPECTS: PTR_TO List representing the list header
?
PARAMETER
PTR_TO List LH
LH.lh_Head=@LH.lh_Tail
LH.lh_TrailPred=@LH.lh_Head
LH.lh_Tail=NIL
LH.lh_Type=2
GRETURN
END
?
?
SUBROUTINE DeletePort
?
? PURPOSE: To deallocate memory and sigBit used by previously initialized
? port RECORD
?
? EXPECTS: PTR_TO MsgPort with address of port RECORD to delete
?
PARAMETER
PTR_TO MsgPort port
LOCAL
INTEGER I
IF port.mp_Node.ln_Name<>NIL THEN RemPort(ExecBase,port)
port.mp_Node.ln_Type=-1
port.mp_MsgList.lh_Head=-1
FreeSignal(ExecBase,port.mp_SigBit)
I=DEALLOCATE(SIZEOF(MsgPort),port)
GRETURN
END
?
?
FUNCTION CreateExtIO
?
? PURPOSE: Allocates memory for and initializes a new IO request block
? of a user-specified number of bytes
?
? EXPECTS: A PTR_TO an already initialized MsgPort to be used as this
? IO request's reply block
?
? RETURNS: A PTR_TO IORequest pointing to the new block
? NIL indicates inability to allocate enough memory or sigBits
?
PARAMETER
PTR_TO MsgPort ioReplyPort
INTEGER size
LOCAL
PTR_TO IORequest ioReq
IF ioReplyPort=NIL THEN
CreateExtIO=NIL
GRETURN
ENDIF
ioReq=ALLOCATE_WITH(size,10000'16)
IF ioReq=NIL THEN
CreateExtIO=NIL
GRETURN
ENDIF
ioReq.io_Message.mn_Node.ln_Type=NT_MESSAGE
ioReq.io_Message.mn_Node.ln_Pri=0
ioReq.io_Message.mn_ReplyPort=ioReplyPort
CreateExtIO=ioReq
GRETURN
END
?
?
SUBROUTINE DeleteExtIO
?
? PURPOSE: Return memory allocated for extended IORequest
?
? EXPECTS: PTR_TO IORequest block whose resources are to be freed
? and size of block
?
PARAMETER
PTR_TO IORequest ioExt
INTEGER size
LOCAL
INTEGER I
ioExt.io_Message.mn_Node.ln_Type=-1
ioExt.io_Device=-1
ioExt.io_Unit=-1
I=DEALLOCATE(size,ioExt)
GRETURN
END
?
?
FUNCTION CreateTask
?
? PURPOSE: Initialize new Task RECORD
?
? EXPECTS: PTR_TO Name of Task, Priority, InitialPC, and StackSize
?
? RETURNS: PTR_TO initialized Task RECORD
?
PARAMETER
PTR_TO TEXT name
BYTE pri
INTEGER initPC
INTEGER stackSize
LOCAL
PTR_TO Task newTask
INTEGER dataSize
dataSize=(stackSize AND FFFFFC'16) + 1
newTask=ALLOCATE_WITH(SIZEOF(newTask)+dataSize,10000'16)
IF NOT newTask THEN
CreateTask=NIL
GRETURN
ENDIF
newTask.tc_SPLower=newTask+SIZEOF(newTask)
newTask.tc_SPUpper=(newTask.tc_SPLower+dataSize) AND FFFFFE'16
newTask.tc_SPReg=newTask.tc_SPUpper
newTask.tc_Node.ln_Type=1
newTask.tc_Node.ln_Pri=pri
newTask.tc_Node.ln_Name=name
AddTask(ExecBase,newTask,initPC,NIL)
CreateTask=newTask
GRETURN
END
?
?
SUBROUTINE DeleteTask
?
? PURPOSE: To return the resources of a Task RECORD to the system
?
? EXPECTS: A PTR_TO Task pointing to Task RECORD to deallocate
?
PARAMETER
PTR_TO Task tc
LOCAL
INTEGER I
RemTask(ExecBase,tc)
I=DEALLOCATE(1+tc.tc_SPUpper-tc,tc)
GRETURN
END